for(j=0;j<sqrt((double)i);j++); 设置断点查看时,j可以大于sqrt((double)i)

来源:百度知道 编辑:UC知道 时间:2024/06/05 11:47:32
为什么?
// c3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "math.h"

int fun(int n)
{
double sum=0;
int i;
for(i=3;i<=n;i++)
{
bool flag=false;
int j;
for(j=0;j<sqrt((double)i);j++);
{
if(i%j==0)
{
flag=true;
}
}
if(flag==false)
{
sum+=sqrt((double)i);
}

}
return sum;
}

int _tmain(int argc, _TCHAR* argv[])
{
int n;
double s;
FILE *out;
printf("nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
out=fopen("out.dat","w");
for(n=0;n<10;n++)
{
fprintf(out,"%f\n",fun(n+20));
}
fclose(out);

return 0;
}

for(j=0;j<sqrt((double)i);j++);
{
if(i%j==0)
{
flag=true;
}
}

在for循环的最后一步中,j本来是小于sqrt((double)i)的,但j++后,j的值就大于sqrt((double)i)了,这是for循环就结束了

只有上述情况下j有可能大于sqrt((double)i),不知你的意思是不是指这个

j的声明要放在函数一开始,你这里放在一个for语句的后面,容易出错!